Another 01Game

题目分析

题目是由1369个01组成的01串<
正确思路:
0和1的数量很关键,首先统计0和1的数量:
1369.0/7 = 195.57142857142858
1369.0/8 = 171.125
1369.0 ** 0.5 = 37.0
1369不是7和8的倍数,说明很可能和ASCII没关系。1369 是 37 的平方,说明可以由0和1正好组成一个正方形(二维码,QR code)。
可以使用Python、MATLAB 等编程生成图片。扫描得到 另一个01字符串。
统计字符串长度,可以当作 ASCII 编程解出 flag

解题过程

先说一下错误的解题过程吧

简单明了的说,是应为对二维码的生成的错误理解,还有对题目的曲解

  • 首先下载下来txt文件之后,看到python生成二维码,立刻想到python里面的qrcode二维码生成库。
  • import qrcode qr = qrcode.QRCode( version=7, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) path="C:\\Users\\hp\\Desktop\\aa.png" files = open("C:\\Users\\hp\\Desktop\\0and1.txt","r") data = files.readline() print(data); qr.add_data(data) qr.make(fit=True) img = qr.make_image() img.show()
  • 二维码生成是获取里面的内容,怎么想也没想明白,怎么没有的到想要的结果,01的输出也不是按照37*37的过程输出的。
  • 睡觉……

    正确解法

  • 今天早晨醒来,重新梳理了一下思路,既然01能组成正方形了,换了一个想法,就是把这个01换成二维码的形式,然后又百度了二维码的内在含义。
  • 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息
    `i=0;
    for c in data:
    i=i+1
    if c==’0’:

    print('██',end="")
    

    else:

    print('    ',end="")
    

    if i % 37 == 0:

    print()`
    

    这儿刚开始二维码比较大,只能不断的缩小字体大小才先显示出来哦~~终于扫出来了一个新的01字符串在这里插入图片描述

  • 根据题目提示,然后使用ASCII码进行解题,得到flag.
1
2
3
4
5
6
7
8
9
10
data = '110011011011001100001110011111110111111001011000010101011011111100101110011101001111101011110111111100001110001001100001110101111010010111111110001101001010000110110000110010001100111111101'
i=0;
s='0'
for c in data:
s=s+''+c;
i=i+1
if i % 7 == 0:
a = int(s,2)
print(chr(a),end="")
s='0'